package com.hbyj.struts.action;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;


import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.hbyj.db.function.DbTools;
import com.hbyj.hbm.vo.Jbqk01;
import com.hbyj.hbm.vo.Jbqk01Id;
import com.hbyj.hbm.vo.Jbqk01temp;
import com.hbyj.hbm.vo.YjczYjcz12;
import com.hbyj.hbm.vo.YjsjYjsj01;
import com.hbyj.util.Constants;
import com.hbyj.util.JsonUtil;
import com.hbyj.util.PageClass;
import com.opensymphony.xwork2.ActionSupport;

public class XxbsAction extends ActionSupport{
	private String jsonResult;
	private int total;
	private List rows = new ArrayList();
	private List rowsTemp = new ArrayList();
	
	//对象
	private YjczYjcz12 yjcz12;
	
	//上传已有点多媒体文件时候用的变量
	private File dmt;
	private String dmtFileName;
	
	//新增点的部分属性，用来确定新增点的编号
	private String xzdSheng;
	private String xzdShi;
	private String xzdXian;
	private String xzdZHLX;
	
	public String getXzdSheng() {
		return xzdSheng;
	}
	public void setXzdSheng(String xzdSheng) {
		this.xzdSheng = xzdSheng;
	}
	public String getXzdShi() {
		return xzdShi;
	}
	public void setXzdShi(String xzdShi) {
		this.xzdShi = xzdShi;
	}
	public String getXzdXian() {
		return xzdXian;
	}
	public void setXzdXian(String xzdXian) {
		this.xzdXian = xzdXian;
	}
	public String getXzdZHLX() {
		return xzdZHLX;
	}
	public void setXzdZHLX(String xzdZHLX) {
		this.xzdZHLX = xzdZHLX;
	}
	public File getDmt() {
		return dmt;
	}
	public void setDmt(File dmt) {
		this.dmt = dmt;
	}
	public String getDmtFileName() {
		return dmtFileName;
	}
	public void setDmtFileName(String dmtFileName) {
		this.dmtFileName = dmtFileName;
	}
	
	
	public YjczYjcz12 getYjcz12() {
		return yjcz12;
	}
	public void setYjcz12(YjczYjcz12 yjcz12) {
		this.yjcz12 = yjcz12;
	}
	
	public String getJsonResult() {
		return jsonResult;
	}
	public void setJsonResult(String jsonResult) {
		this.jsonResult = jsonResult;
	}
	
	public int getTotal() {
		return total;
	}
	public void setTotal(int total) {
		this.total = total;
	}
	public List getRows() {
		return rows;
	}
	public void setRows(List rows) {
		this.rows = rows;
	}
	
	public List getRowsTemp() {
		return rowsTemp;
	}
	public void setRowsTemp(List rowsTemp) {
		this.rowsTemp = rowsTemp;
	}
	public String queryJBQKForXxbs(){
		HttpServletRequest request = ServletActionContext.getRequest();
		String pageNo = request.getParameter("page");
		int pageSize = Constants.PAGE_KEY;
		String zhCode = request.getParameter("zhCode");
		String mc = request.getParameter("mc");
		String conStr = "";
		if(!"".equals(mc)){
			conStr = "and jbqk0110 like '%"+mc+"%'";
		}
		//  modefy by cuiyi 20130106 统一前台表现形式
		String hqlTemp = "select distinct id.jbqk0100,jbqk0110,jbqk0120, jbqk0130,jbqk0140,jbqk0150,jbqk0160,jbqk0170,jbqk01.jbqk0180,jbqk01.jbqk0190,id.jbqk0102 from Jbqk01 as jbqk01  where id.jbqk0100 like '"+zhCode+"'" + conStr;
		String hql = "from Jbqk01 where id.jbqk0100 like '"+zhCode+"'" + conStr;
		String countHql = "select count(*) from JBQK01 where JBQK0100 like '"+zhCode+"'" +conStr;
		int t = DbTools.getDataSQLCount(countHql);
		PageClass page = new PageClass();
		page.setPageShow(pageSize);  //设置每页显示的行数
		page.setPageCount(t);  //设置总页数
		page.setCurrentPage(Integer.parseInt(pageNo));  //设置当前页
		int first=page.getNextIndex(); //获得开始的索引值
		int max=page.getPageShow();  //获得每次显示的值
		//  modefy by cuiyi 20130106 统一前台表现形式
		rowsTemp = DbTools.parseBaleInfoObj(DbTools.findPageHQL(first, max,hqlTemp));
		rows = DbTools.findPageHQL(first, max,hql);
		total = t;
		return SUCCESS;
	}
	
	
	//将已有点插入单点上报数据表,同时将多媒体文件的名字给改变了，并且需要将上传的文件放到指定的目录下面
	public void insertYYDForXxbs(){
		if(!(dmtFileName==null)){
			String newFileName = changeFileName();
			if(uploadFile(newFileName)){//上传成功之后
				yjcz12.setYjcz12080(newFileName);
			}
		}
		yjcz12.setYjcz12090("0");
		try{
			DbTools.saveOrUpdateObj(yjcz12);
			//此时，应该向YjsjYjsj01中插入一条数据，信息续报事件
			YjsjYjsj01 yjsj01 = new YjsjYjsj01();
			String yjsj01000 = yjcz12.getYjcz12000().substring(0,6)+"06";//表示续报事件
			yjsj01000 = queryTheBiggerInYJSJ01(yjsj01000);//得到事件统一编码
			yjsj01.setYjsj01000(yjsj01000);
			yjsj01.setYjsj01010(yjcz12.getYjcz12010());//事件接报时间
			yjsj01.setYjsj01020(yjcz12.getYjcz12000());//事件灾害点统一编号
			yjsj01.setYjsj01024(yjcz12.getYjcz12010());//事件信息续报时间
			yjsj01.setYjsjjbqk0102(yjcz12.getJbqk0102());
			yjsj01.setYjsj01050("00");//当前事件的状态
			try {
				DbTools.saveObj(yjsj01);
				ServletActionContext.getResponse().getOutputStream().write("true".getBytes("utf-8"));
			} catch (IOException e) {
				ServletActionContext.getResponse().getOutputStream().write("false".getBytes("utf-8"));
			}
			///保存事件结束//////
		}catch (Exception e) {
			try {
				ServletActionContext.getResponse().getOutputStream().write("false".getBytes("utf-8"));
			} catch (Exception e1) {
			}
		}
		
			
	}
	
	//将新增点插入单点上报数据表,同时将多媒体文件的名字给改变了，并且需要将上传的文件放到指定的目录下面
	//动作：1拿到行政区划和灾害类型，查询JBQK01表，生成新的编号，然后插入到JBQK01表之中
	//2将生成的编号给连同传递过来的单点上报信息组合成yjcz12插入到相应的数据表之中
	public void insertXZDForXxbs(){
		String numCode = xzdXian+xzdZHLX;
		String newCode = queryTheBiggerInJBQK01Temp(numCode);
		if(insertXZDToJBQK01Temp(newCode,yjcz12.getYjcz12030(),yjcz12.getYjcz12040())){
			yjcz12.setYjcz12000(newCode);
			yjcz12.setYjcz12090("1");
			yjcz12.setJbqk0102("new");
		}
		if(!(dmtFileName==null)){
			String newFileName = changeFileName();
			if(uploadFile(newFileName)){//上传成功之后
				yjcz12.setYjcz12080(newFileName);
			}
		}
		try{
			DbTools.saveOrUpdateObj(yjcz12);
			//此时，应该向YjsjYjsj01中插入一条数据，信息上报事件
			YjsjYjsj01 yjsj01 = new YjsjYjsj01();
			String yjsj01000 = yjcz12.getYjcz12000().substring(0,6)+"05";//表示上报事件
			yjsj01000 = queryTheBiggerInYJSJ01(yjsj01000);//得到事件统一编码
			yjsj01.setYjsj01000(yjsj01000);
			yjsj01.setYjsj01010(yjcz12.getYjcz12010());//事件接报时间
			yjsj01.setYjsj01020(yjcz12.getYjcz12000());//事件灾害点统一编号
			yjsj01.setYjsj01022(yjcz12.getYjcz12010());//事件信息上报时间
			yjsj01.setYjsj01050("00");//当前事件的状态
			yjsj01.setYjsjjbqk0102(yjcz12.getJbqk0102());
			DbTools.saveObj(yjsj01);
			///保存事件结束//////
		}catch (Exception e) {
			System.out.println(e);
		}
		try {
			ServletActionContext.getResponse().getOutputStream().write("true".getBytes("utf-8"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//插入到jbqk01Temp
	public boolean insertXZDToJBQK01Temp(String code,String lon,String lat){
		Jbqk01temp jbqk01temp = new Jbqk01temp();
		jbqk01temp.setJbqk0100(code);
		jbqk01temp.setJbqk0120(Double.valueOf(lon));
		jbqk01temp.setJbqk0130(Double.valueOf(lat));
		jbqk01temp.setJbqk0102("new");
		boolean flag = DbTools.saveObj(jbqk01temp);
		return flag;
	}
	
	//查询YJSJ01表中最大的编号
	public String queryTheBiggerInYJSJ01(String numCode){
		String newCode="";
		String code = numCode+"____";
		String hql = "from YjsjYjsj01 where yjsj01000 like '"+code+"' order by yjsj01000 DESC";
		List list = (List)DbTools.findByHql(hql);
		if(list.size()>0){
			YjsjYjsj01 yjsj01 = (YjsjYjsj01)list.get(0);
			String num = yjsj01.getYjsj01000();
			long newCodeNum = Long.valueOf(num)+1;
			newCode = String.valueOf(newCodeNum);
		}else{
			newCode = numCode +"0001";
		}
		return newCode;
	}
	
	//查询出JBQK01表中最大的编号
	public String queryTheBiggerInJBQK01Temp(String numCode){
		String newCode="";
		String code = numCode+"____";
		String hql = "from Jbqk01temp where jbqk0100 like '"+code+"' order by jbqk0100 DESC";
		List list = (List)DbTools.findByHql(hql);
		if(list.size()>0){
			Jbqk01temp jbqk = (Jbqk01temp)list.get(0);
			String num = jbqk.getJbqk0100();
			long newCodeNum = Long.valueOf(num)+1;
			newCode = String.valueOf(newCodeNum);
		}else{
			newCode = numCode +"0001";
		}
		return newCode;
	}
	
	//将多媒体文件的名字给改变
	public String changeFileName(){
		String newFileName = "";
		DateFormat format = new SimpleDateFormat("yyMMddHHmmss");
        String formatDate = format.format(new java.util.Date());
        String type = dmtFileName.substring(dmtFileName.length()-4, dmtFileName.length());
        newFileName  = formatDate+type;
		return newFileName;
	}
	
	//将上传的文件放到指定的目录下面
	public boolean uploadFile(String newFileName){
		String serverPath="uploadfolder/mp3folder";
		String getFilePath = ServletActionContext.getServletContext().getRealPath("/"+serverPath);
		if(copyFile(getFilePath, newFileName ,dmt)){
			return true;
		}else{
			return false;
		}
	}
	private boolean copyFile(String uploadpath, String uploadFileFileName, File f) {
			String getfilePath = uploadpath;
	        String newfilename = uploadFileFileName;
	        //要存放的文件对象
	        File uploadFile  = new File(getfilePath+"/"+newfilename);
	        // 复制file对象，实现上传 
	        try {
				FileUtils.copyFile(f,uploadFile);
			} catch (IOException e) {
				e.printStackTrace();
			}
			return true;
	}
	
	public void queryXZQHForXZD() throws UnsupportedEncodingException, IOException{
		HttpServletRequest request = ServletActionContext.getRequest();
		String code = request.getParameter("code");
		String hql = "from YjczXzqh01 where xzqh01010 = '"+code+"'";
		List list =(List)DbTools.findByHql(hql);
		if(list.size()>0){
			ServletActionContext.getResponse().getOutputStream().write(JsonUtil.listToJson(list).getBytes("utf-8"));
		}
		
	}
	
}
